A programmable execution service (“PES”) can provide computing resources for executing distributed applications on a permanent or an as-needed basis. The computing resources provided by a PES may include various types of resources, such as data processing resources, data storage resources, data communication resources, and the like. Each type of computing resource may be general-purpose or may be available in a number of specific configurations. For example, data processing resources may be available as virtual machine instances (“instances”). The instances may be configured to execute all or a portion of a distributed application, including World Wide Web (“Web”) servers, application servers, media servers, database servers, support services, and the like. The resources provided by a PES can often be purchased and utilized according to various financial models.
Distributed applications that execute within a PES can be highly complex. For instance, it is not uncommon for such applications to be configured to execute many hundreds of different types of services on a thousand or more instances. As a result of this complexity it can be very difficult to optimize the execution of a PES application. Additionally, many PES applications provide functionality for which high-availability is critical. For example, a PES application might be configured to provide an e-commerce Web site that must operate with very little or no downtime. It can be difficult to optimize the execution of a high-availability PES application because optimization often involves experimentation. The possibility of downtime that might be caused by such experimentation typically outweighs the possible benefits that might be achieved from optimizing the execution of the PES application. As a result, the execution of some types of PES applications is not optimized.
It is with respect to these and other considerations that the disclosure made herein is presented.